package GestorClinico;

import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import Servicios.Conexion;


/**
 * @file ControlHorarioDAO.java
 * @brief Implementa la clase ControlHorarioDAO
 * 
 * Obtiene y actualiza la información de la BD referente al controlHorario
 * 
 * @author Juan Miguel Fernández Pelegrina
 * @version 01.01
 * 
 */

public class ControlHorarioDAO {
	
	/*add(c:ControlHorario):void
	Descripción: Agrega el objeto ControlHorario a la BD.
	Retorno:nada.*/

	public static void add(ControlHorario c) throws SQLException, IOException, ClassNotFoundException{
		
		Conexion.conectar();
		DateFormat formatoFecha = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		
		
		Conexion.actualizar("INSERT ControlHorario(fechaEntrada,fechaSalida,idUsuario) VALUES (\'"+
				formatoFecha.format(c.getFechaEntrada())+
				"\',\'"+ formatoFecha.format(c.getFechaSalida()) +
				"\',"+ c.getIdPersonalClinica()+ ");");
		Conexion.desconectar();
		
	}
	
	/*getControlHorarioEmpleado(idPersonalClinica:int, fecha:Date):ControlHorario[]
	Descripción: Obtiene las instancias ControlHorario asociadas al
	idPersonalClinica en la fecha indicada.
	Si la fecha es nula devolverá todos los objetos asociados al id.
	Retorno: Un vector con los objetos ControlHorario obtenidos.*/
	
	public static ControlHorario[] getControlHorarioEmpleado(int idPersonalClinica,Date fecha) throws SQLException, IOException, ClassNotFoundException{
		DateFormat formatoFecha = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		ControlHorario [] controlHorario;
		Conexion.conectar();
		ResultSet tabla = Conexion.consultar("SELECT * FROM ControlHorario WHERE idUsuario="+idPersonalClinica+";");
		
		ArrayList<ControlHorario> list_controlHorario = new ArrayList<ControlHorario>();
		while(tabla.next()) {
			try {
				list_controlHorario.add(new ControlHorario(tabla.getInt("idControlHorario"),formatoFecha.parse(tabla.getString("fechaEntrada")),formatoFecha.parse(tabla.getString("fechaSalida")),tabla.getInt("idUsuario")));
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
                Conexion.desconectar();
		
		if(list_controlHorario.size()>0) {
			controlHorario = new ControlHorario[list_controlHorario.size()];
			list_controlHorario.toArray(controlHorario);
			return controlHorario;
		}else{
			return null;
		}
	}
	
	/*update(c:ControlHorario):void
	Descripción: Actualiza la información asociada al objeto ControlHorario
	Retorno:nada.*/
    
	public static void update(ControlHorario c) throws SQLException, IOException, ClassNotFoundException{
		DateFormat formatoFecha = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Conexion.conectar();
		Conexion.actualizar("UPDATE ControlHorario SET fechaEntrada=\'"+formatoFecha.format(c.getFechaEntrada())+
				"\', fechaSalida = \'"+ formatoFecha.format(c.getFechaSalida())+
				"\', idUsuario = \'"+ c.getIdPersonalClinica() +
				"\' WHERE idControlHorario="+c.getIdControlHorario()+";");
		Conexion.desconectar();
	}
	
	public static ControlHorario getUltimo(int idPersonal) throws SQLException, IOException, ClassNotFoundException{
		DateFormat formatoFecha = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Conexion.conectar();
		ResultSet tabla = Conexion.consultar("SELECT h1.idControlHorario, h1.fechaEntrada, h1.fechaSalida, h1.idUsuario  FROM ControlHorario h1 WHERE h1.idUsuario=\'"+idPersonal+"\' AND h1.fechaEntrada= (SELECT MAX( h2.fechaEntrada ) FROM ControlHorario h2 WHERE h2.idUsuario=\'"+idPersonal+"\');");
		
		ControlHorario h = null;
		
		if(tabla.next()) {
			try {
				h = new ControlHorario(tabla.getInt("idControlHorario"),formatoFecha.parse(tabla.getString("fechaEntrada")),formatoFecha.parse(tabla.getString("fechaSalida")),tabla.getInt("idUsuario"));
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		Conexion.desconectar();
		return h;
	}
	
	//He introducido este metodo porque no estaba reflejado en la documentación y en la clase
	//ControlHorario viene el metodo eliminar de la base de datos un controlHorario
	public static void delete(ControlHorario c) throws SQLException, IOException, ClassNotFoundException{
		Conexion.conectar();
		Conexion.actualizar("DELETE FROM ControlHorario WHERE idControlHorario="+c.getIdControlHorario()+";");
		Conexion.desconectar();
	}


}
